package com.yf.ref;

import com.yf.pojo.User;

import java.lang.ref.SoftReference;

/**
 * -Xms10m -Xmx10m
 */
public class SoftReferenceTest {
    public static void main(String[] args) {
        // 创建对象，建立软引用
        SoftReference<User> userSoftRef = new SoftReference<>(new User(1, "yvan"));
        // 从软引用重新获取强引用
        System.out.println("before gc: ");
        System.out.println("userSoftRef -> " + userSoftRef.get());

        System.gc();
        System.out.println("after gc: ");
        // 垃圾回收之后获取软引用中的对象(内存充足，gc不会回收软引用可达的对象)
        System.out.println("userSoftRef -> " + userSoftRef.get());

        try {
            // 让系统认为内存资源紧张
            byte[] bs = new byte[7 * 1024 * 1024];
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 再次从软引用中获取数据（当内存不足时，GC会回收软引用可达的对象）
            System.out.println("当内存不足时: ");
            System.out.println("userSoftRef -> " + userSoftRef.get());
        }

    }


}
